package com.niit.scala

object Base_03 {

  /*
  def main(args: Array[String]): Unit = {

    //1.方法的调用
    //1.1后缀调用法 对象名.方法名(参数)
    //求-1的绝对值
    var i = Math.abs(-1)
    //1.2 中缀调用法 对象名 方法名 参数 操作符是一个方法名 + - * / %
    var v = 1 to 10 // 1是对象 to是方法 10是参数
    var abs = Math abs -1
    var s = 2 + 1  //2是一个对象 1是参数 + 方法
    //1.3花括号调用 方法只有一个参数时候才能使用花括号调用法
    i = Math.abs{
      println("绝对值：")
      -1
    }
    println(i)
    //1.4无括号调用法 如果方法没有参数，可以省略方法后面的括号
     i = sayHello
    println(i)

    /*
    2.函数 本身是一个对象
    类似于方法，函数也是有参数列表和返回值，函数定义是不需要使用def关键字，无需指定返回值类型
    格式： var/val 函数变量名 = (参数名1:参数类型,参数名1:参数类型..) => 函数体
     */
    //定义两个整数求和的函数
    //  函数变量名    (参数名1:参数类型,参数名1:参数类型..)
    var     sum    = (a:Int,b:Int) => a+b
     i =sum(1,2)
     i =add(1,2)
    /*
    方法和函数的区别：
      方法属于类和对象，在运行时候会加载JVM的方法区中
      可以将函数对象赋值给一个变量，在运行时会加载到JVM堆内存中
      函数是一个对象，继承FuncationN,函数对象有自带的方法，apply curried toString tupled这些方法
      结论：在Scala中，函数是对象，而方法属于对象的，可以理解为 方法 归属于 函数
            函数必要有返回值，方法不一定要有返回值
           函数大  方法小
     */
    //3.方法转换为函数 方法名 _
      val a = add _
      i = a(1,2)

  }

  def add(a:Int,b:Int)= a+b

  def sayHello(): Int ={
    var o = 1+1+2+3+64+89
    println("Hello"+o)
    33
  }

   */


  /*
   类：图纸 设计图
   对象： 根据图纸 建造的 真实物体
   */
  //1.在Scala创建一个类
  class Person //Person空类 如果类是空的，没有任何成员 可以省略{}

  class Student{
    //var name = ""
    //var age = 0
    //优雅定义成员变量 _作为初始变量值的占位符,必须使用var
    private var name:String = _  // 等于Java  private String name;
    var age:Int = _


    def getName(): String ={
      name
    }

    def setName(name:String)={
      this.name = name
    }

    def printInfo(): Unit ={
      println(s"我叫${this.name},今年${this.age}岁")
    }
  }

  def main(args: Array[String]): Unit = {

    //实例化对象 p为对象名 。 如果构造器参数为空，在实例化的时候可以省略()
    val p = new Person
    println(p)

    val stu1 = new Student
    //stu1.name = "魏淑芬"
    stu1.setName("魏淑芬")
    stu1.age = 18
    stu1.printInfo()

  }
}
